#include #include #include "Ucglib.h" #define trigPin 6 #define echoPin 5 #define ServoPin 3 int Ymax = 240; int Xmax = 320; int Xcent = Xmax / 2; int base = 210; int scanline = 185; Servo baseServo; //Ucglib_ILI9341_18x240x320_SWSPI ucg(/*sclk=*/ 13, /*data=*/ 11, /*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8); Ucglib_ILI9341_18x240x320_HWSPI ucg(/*cd=*/ 9, /*cs=*/ 10, /*reset=*/ 8); void setup(void) { ucg.begin(UCG_FONT_MODE_SOLID); ucg.setRotate90(); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); Serial.begin(115200); baseServo.attach(ServoPin); ucg.setFontMode(UCG_FONT_MODE_TRANSPARENT); ucg.setColor(0, 0, 100, 0); ucg.setColor(1, 0, 100, 0); ucg.setColor(2, 20, 20,20); ucg.setColor(3, 20, 20, 20); ucg.drawGradientBox(0, 0, 320, 240); ucg.setPrintDir(0); ucg.setColor(0, 5, 0); ucg.setPrintPos(70,120); ucg.setFont(ucg_font_logisoso32_tf); ucg.print("Mini Radar"); ucg.setColor(0, 255, 0); ucg.setPrintPos(70,120); ucg.print("Mini Radar"); ucg.setFont(ucg_font_courB14_tf); ucg.setColor(20, 255, 20); ucg.setPrintPos(90,200); ucg.print("Testing..."); baseServo.write(90); for(int x=0;x<180;x+=5) { baseServo.write(x); delay(50); } ucg.print("OK!"); delay(500); ucg.setColor(0,0, 0, 0); ucg.setColor(1,0, 0, 0); ucg.setColor(2,0, 0, 0); ucg.setColor(3,0, 0, 0); ucg.drawGradientBox(0, 0, 320, 240); delay(10); //ucg.clearScreen(); cls(); ucg.setFontMode(UCG_FONT_MODE_SOLID); ucg.setFont(ucg_font_helvR08_hr); // or freedoomr10_tr } void cls() { ucg.setColor(0, 0, 0, 0); for(int s=0;s<240;s++) { ucg.drawHLine(0,s,320); delay(1); } //ucg.drawBox(0, 0, 160, 60); } int calculateDistance() { long duration; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); return duration*0.034/2; } void fix_font() { ucg.setColor(0, 180, 0); ucg.setPrintPos(144,44); ucg.print("1.00"); ucg.setPrintPos(144,100); ucg.print("0.60"); ucg.setPrintPos(144,165); ucg.print("0.30"); } void fix() { ucg.setColor(0, 180, 0); ucg.drawDisc(Xcent, base+1, 3, UCG_DRAW_ALL); ucg.drawCircle(Xcent, base+1, 210, UCG_DRAW_UPPER_LEFT); ucg.drawCircle(Xcent, base+1, 210, UCG_DRAW_UPPER_RIGHT); ucg.drawCircle(Xcent, base+1, 135, UCG_DRAW_UPPER_LEFT); ucg.drawCircle(Xcent, base+1, 135, UCG_DRAW_UPPER_RIGHT); ucg.drawCircle(Xcent, base+1, 70, UCG_DRAW_UPPER_LEFT); ucg.drawCircle(Xcent, base+1, 70, UCG_DRAW_UPPER_RIGHT); ucg.drawLine(0, base+1, Xmax,base+1); ucg.setColor(0, 180, 0); for(int i= 40;i < 300; i+=2) { if (i % 10 == 0) ucg.drawLine(185*cos(radians(i))+Xcent,base - 185*sin(radians(i)) , 205*cos(radians(i))+Xcent,base - 205*sin(radians(i))); else ucg.drawLine(195*cos(radians(i))+Xcent,base - 195*sin(radians(i)) , 205*cos(radians(i))+Xcent,base - 205*sin(radians(i))); } ucg.setColor(0,200,0); ucg.drawLine(0,0,0,36); for(int i= 0;i < 5; i++) { ucg.setColor(0,random(200)+50,0); ucg.drawBox(2,i*8,random(28)+3,6); } ucg.setColor(0,180,0); ucg.drawFrame(292,0,28,28); ucg.setColor(0,60,0); ucg.drawHLine(296,0,20); ucg.drawVLine(292,4,20); ucg.drawHLine(296,52,20); ucg.drawVLine(318,4,20); ucg.setColor(0,220,0); ucg.drawBox(296,4,8,8); ucg.drawBox(296,16,8,8); ucg.drawBox(308,16,8,8); ucg.setColor(0,100,0); ucg.drawBox(308,4,8,8); ucg.setColor(0,90,0); ucg.drawTetragon(124,220,116,230,196,230,204,220); ucg.setColor(0,160,0); ucg.drawTetragon(134,220,126,230,186,230,194,220); ucg.setColor(0,210,0); ucg.drawTetragon(144,220,136,230,176,230,184,220); } void loop(void) { int distance; fix(); fix_font(); for (int x=180; x > 4; x-=2){ baseServo.write(x); int f = x - 4; ucg.setColor(0, 255, 0); ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f))); f+=2; ucg.setColor(0, 128, 0); ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f))); f+=2; ucg.setColor(0, 0, 0); ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f))); ucg.setColor(0,200, 0); distance = calculateDistance(); if (distance < 100) { ucg.setColor(255,0,0); ucg.drawDisc(2.2*distance*cos(radians(x))+ Xcent,-2.2*distance*sin(radians(x))+base, 1, UCG_DRAW_ALL); } else { ucg.setColor(255,255,0); ucg.drawDisc(208*cos(radians(x))+Xcent,-208*sin(radians(x))+base, 1, UCG_DRAW_ALL); } Serial.print(x); Serial.print(" , "); Serial.println(distance); if (x > 70 and x < 110) fix_font(); ucg.setColor(255,255, 0); ucg.setPrintPos(20,230); ucg.print("DEG: "); ucg.setPrintPos(54,230); ucg.print(x); ucg.print(" "); ucg.setPrintPos(240,230); ucg.print(" "); ucg.print(distance); ucg.print(" cm "); } //ucg.clearScreen(); delay(50); cls(); fix(); fix_font(); for (int x=1; x < 176; x+=2){ baseServo.write(x); int f = x + 4; ucg.setColor(0, 255, 0); ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f))); f-=2; ucg.setColor(0, 128, 0); ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f))); f-=2; ucg.setColor(0, 0, 0); ucg.drawLine(Xcent, base, scanline*cos(radians(f))+Xcent,base - scanline*sin(radians(f))); ucg.setColor(0, 200, 0); distance = calculateDistance(); if (distance < 100) { ucg.setColor(255,0,0); ucg.drawDisc(2.2*distance*cos(radians(x))+Xcent,-2.2*distance*sin(radians(x))+base, 1, UCG_DRAW_ALL); } else { ucg.setColor(255,255,0); ucg.drawDisc(208*cos(radians(x))+Xcent,-208*sin(radians(x))+base, 1, UCG_DRAW_ALL); } Serial.print(x); Serial.print(" , "); Serial.println(distance); if (x > 70 and x < 110) fix_font(); ucg.setColor(255,255, 0); ucg.setPrintPos(20,230); ucg.print("DEG: "); ucg.setPrintPos(54,230); ucg.print(x); ucg.print(" "); ucg.setPrintPos(240,230); ucg.print(" "); ucg.print(distance); ucg.print(" cm "); } //ucg.clearScreen(); // delay(50); cls(); }